import com.mysql.cj.jdbc.MysqlDataSource;

import javax.sql.DataSource;
import java.sql.Connection;
import java.sql.PreparedStatement;
import java.sql.SQLException;
import java.util.Scanner;

public class Insert_Demo {
    public static void main(String[] args) throws SQLException {
        Scanner scan = new Scanner(System.in);
        //1、创建数据源 设置url 设置user 设置password，创建连接
        DataSource dataSource = new MysqlDataSource();
        ((MysqlDataSource)dataSource).setUrl("jdbc:mysql://127.0.0.1:3306/work_0318?characterEncoding=utf8&useSSL=false");
        ((MysqlDataSource)dataSource).setUser("root");
        ((MysqlDataSource)dataSource).setPassword("1234");

        //2、和数据库服务器建立连接(在这边出错考虑看看1中的内容有没有写错
        Connection connection = dataSource.getConnection();

        //3、构建一个能操控数据库的语句  以对象的形式建立连接，内部会对sql进行解析校验
            //3.1 直接以字符串的形式构造
//        String sql = "insert into test values (18,'林一')";
//        PreparedStatement preparedStatement = connection.prepareStatement(sql);
            //3.2 以拼接字符串的形式构造
//        int age = scan.nextInt();
//        String name = scan.next();
//        String sql = "insert into test values ("+age+",'"+name+"')";
//        PreparedStatement preparedStatement = connection.prepareStatement(sql);
            //3.3 用PrepareStatement 提供的API 来完成动态内容设置
        String sql = "insert into test values (?,?)";
        int age = scan.nextInt();
        String name = scan.next();
        PreparedStatement preparedStatement = connection.prepareStatement(sql);
        preparedStatement.setInt(1,age);
        preparedStatement.setString(2,name);


        //4、执行sql，把刚才解析好的语句发给数据库服务器
        //   返回值是一个int类型的数，表明操作影响了几行
        int n = preparedStatement.executeUpdate();
        System.out.println("n = "+n);

        //5、释放资源 (先使用的后释放
        //   主要是释放 语句对象 和 连接对象，DataSource不需要释放
        preparedStatement.close();
        connection.close();
    }
}
